Eigen中得到的欧拉角转成ROS::tf中的四元数的问题

您所在的位置:网站首页 欧拉角 转序 Eigen中得到的欧拉角转成ROS::tf中的四元数的问题

Eigen中得到的欧拉角转成ROS::tf中的四元数的问题

2024-07-13 11:03| 来源: 网络整理| 查看: 265

Eigen中得到的欧拉角转成ROS::tf中的四元数的问题

ROS::tf中的欧拉角转动顺序和对应旋转矩阵

ros中的欧拉角可以分为绕定轴和绕动轴的变换方式,函数没有给出Euler时,是按定轴转动,矩阵依次左乘。若函数的名字中有Euler,则表示为绕动轴转动的方式,矩阵依次右乘。 对于欧拉角->四元数,在Quaternion.h中定义了setRPY(),setEuler(), setEulerZYX(),详细可参照这篇博文.

setRPY();

这个函数采用固定轴的旋转方式,先绕定轴x旋转(横滚Roll),然后再绕定轴y(俯仰Pitch),最后绕定轴z(偏航Yaw)。

从数学形式上说,这是绕定轴XYZ矩阵依次左乘,即:R = R(z) R(y)R(x)的顺序。由于是绕着定轴转动,所以很直观,便于人机交互。

setEuler()

setEuler(yaw, pitch, roll); 这种方式是绕着动轴转动,先绕Y轴,在绕变换后的X轴,再绕变换后的Z轴旋转。从数学形式上说,这是绕定轴YXZ矩阵依次右乘,即:R = R(y)R(x)R(z) 的顺序。

Eigen中欧拉角转动顺序

Eigen中是采用绕动轴转动的变换方式. 从数学形式上说,绕动轴矩阵依次右乘.

对setRPY(),若为了得到与ROS中相同的R = R(z) R(y)R(x)的矩阵,则需要2-1-0转序(Y-P-R,z-y-x)对serEuler(),为了得到与ROS中相同的R = R(y)R(x)R(z) 的矩阵,则需要1-0-2转序 代码实现 sensor_msgs::Imu imu_in = imuQueImu.front();//IMU中随机获取一个四元数姿态 Eigen::Quaterniond q_I_B(imu_in.orientation.w, imu_in.orientation.x, imu_in.orientation.y, imu_in.orientation.z); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3